# -*- coding:utf-8 -*-
from flask import current_app  # 当前app

# 处理 sqlalchemy 数据迁移的工具,当数据模型发生变化的时候，将修改后的东西重新映射到数据库中。
from flask_migrate import Migrate, MigrateCommand

from flask_script import Manager

from info import create_app, db
from info.models import User
from info.utils.utils import random_uuid

# 创建app对象
app = create_app("production")  # production:有了这个参数，Flask才能知道在哪里可以找到模板和静态文件等东西
# 创建manager对象，用于启动服务
manager = Manager(app)
# 将app与db关联
Migrate(app, db)
# 将迁移命令添加到manager中
manager.add_command("db", MigrateCommand)


@manager.option("-n", "-name", dest="name")  # @manager.option 自动注册
@manager.option("-p", "-password", dest="password")
def create_super_user(name, password):
    """创建超级管理员账户"""
    if not all([name, password]):
        current_app.logger.error("超级管理员用户名和密码不能为空")
        print("超级管理员用户名和密码不能为空")
    user = User()
    user.id = random_uuid()
    user.nick_name = user.mobile = name
    user.password = password
    user.is_admin = True

    try:
        db.session.add(user)
    except Exception as e:
        current_app.logger.error(e)
        print(f"添加管理员账户失败，name={name}，password={password}")
    else:
        db.session.commit()

    current_app.logger.info(f"添加管理员账户成功，name={name}，password={password}")
    print(f"添加管理员账户成功，name={name}，password={password}")


if __name__ == '__main__':
    manager.run()
